﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//int add(int x, int y)
//{
//	return x + y;
//}
//int sud(int x, int y)
//{
//	return x - y;
//}
//int mul(int x, int y)
//{
//	return x * y;
//}
//int div(int x, int y)
//{
//	return x / y;
//}
//void test(int (*p)(int, int))
//{
//	int x, y;
//	printf("输入操作数：\n");
//	scanf("%d %d", &x, &y);
//	printf("%d\n", (*p)(x, y));
//}
//
//int main()
//{
//	int (*p[5])(int, int) = { NULL,add,sud,mul,div};
//	int n = 0;
//	do
//	{
//		printf("*************************\n");
//		printf(" 1:add 2:sub \n");
//		printf(" 3:mul 4:div \n");
//		printf(" 0:exit \n");
//		printf("*************************\n");
//		printf("请选择：");
//		scanf("%d", &n);
//		if (n > 0 && n <= 4)
//		{
//			test((*p[n]));
//		}
//		else if (n == 0)
//		{
//			printf("已退出\n");
//		}
//		else
//		{
//			printf("输入有误\n");
//		}	
//	} while (n);
//	return 0;
//}
//#include <stdio.h>
//#include <string.h>
//
//// 判断s2是否是s1旋转后的字符串
//int isRotation(char* s1, char* s2) {
//    // 若两个字符串长度不同，直接不是旋转得到的
//    if (strlen(s1) != strlen(s2)) {
//        return 0;
//    }
//    // 拼接s1和s1得到新字符串
//    char s1s1[100];
//    strcpy(s1s1, s1);
//    strcat(s1s1, s1);
//    // 检查s2是否是s1s1的子串
//    return strstr(s1s1, s2) != NULL;
//}
//
//int main() {
//    char s1[100], s2[100];
//    printf("请输入第一个字符串：");
//    scanf("%s", s1);
//    printf("请输入第二个字符串：");
//    scanf("%s", s2);
//    // 输出判断结果
//    printf(isRotation(s1, s2) ? "1\n" : "0\n");
//    return 0;
//}
//#include <stdio.h>
//// 查找矩阵中是否存在target，matrix为m行n列的矩阵
//int findNumber(int matrix[][100], int m, int n, int target) {
//    // 从右上角开始，row初始为0（第一行），col初始为n - 1（最后一列）
//    int row = 0, col = n - 1;
//    while (row < m && col >= 0) {
//        if (matrix[row][col] == target) {
//            // 找到目标数，返回1表示存在
//            return 1;
//        }
//        else if (matrix[row][col] > target) {
//            // 当前数大，目标数在左边，列左移
//            col--;
//        }
//        else {
//            // 当前数小，目标数在下边，行下移
//            row++;
//        }
//    }
//    // 遍历完未找到，返回0表示不存在
//    return 0;
//}
//
//int main() {
//    int m, n, target;
//    printf("请输入矩阵的行数：");
//    scanf("%d", &m);
//    printf("请输入矩阵的列数：");
//    scanf("%d", &n);
//
//    int matrix[100][100];
//    printf("请输入矩阵元素（每行%d个，共%d行）：\n", n, m);
//    for (int i = 0; i < m; i++) {
//        for (int j = 0; j < n; j++) {
//            scanf("%d", &matrix[i][j]);
//        }
//    }
//
//    printf("请输入要查找的数字：");
//    scanf("%d", &target);
//
//    if (findNumber(matrix, m, n, target)) {
//        printf("存在\n");
//    }
//    else {
//        printf("不存在\n");
//    }
//
//    return 0;
//}

//int main()
//{
//	int arr[5][5] = { 0 };
//	for (int i = 0; i < 5; i++)
//	{
//		arr[i][0] =  1 ;
//		arr[i][i] = 1;
//		for (int j = 1; j < i; j++)
//		{
//			arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
//		}
//	}
//	for (int i = 0; i < 5; i++)
//	{
//		for (int j = 0; j <=i;j++)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}
//void test(int* arr, int size, int* a, int* b)
//{
//	int x = 0;
//	
//	for (int i = 0; i < size; i++)
//	{
//		x ^= arr[i];
//	}
//	for (int i = 0; i < 32; i++)
//	{
//		if ((x >> i) & 1 == 1)
//		{
//			x = i;
//			break;
//		}
//	}
//	for (int i = 0; i < size; i++)
//	{
//		if ((arr[i] >> x) &1==1)
//		{
//			(*a) ^= arr[i];
//		}
//		else
//		{
//			(*b) ^= arr[i];
//		}
//	}
//}
//int main()
//{
//	int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
//	int a = 0; int b = 0;
//	test(arr, sizeof(arr) / sizeof(arr[0]), &a, &b);
//		printf("%d %d", a, b);
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//	int a[5] = { 1, 2, 3, 4, 5 };
//	int* ptr = (int*)(&a + 1);
//	printf("%d,%d", *(a + 1), *(ptr - 1));
//	return 0;
//} 
//程序的结果是什么？
//在X86环境下
//假设结构体的⼤⼩是20个字节
//程序输出的结果是啥？
//struct Test
//{
//	int Num;
//	char* pcName;
//	short sDate;
//	char cha[2];
//	short sBa[4];
//}*p = (struct Test*)0x100000;
////int main()
////{
//	printf("%p\n", p + 0x1);
//	//printf("%p\n", (unsigned long)p + 0x1);
//	//printf("%p\n", (unsigned int*)p + 0x1);
//	return 0;
//}*/
//int cmp(const void* e1, const void* e2)
//{
//	return (*(int*)e1) - (*(int*)e2);
//}
//void _swap(void* p1, void* p2, int size)
//{
//	for (int i = 0; i < size; i++)
//	{
//		char tmp = *((char*)p1 + i);
//		*((char*)p1 + i) = *((char*)p2 + i);
//		*((char*)p2 + i) = tmp;
//	}
//}
//void _qsort( void* arr, size_t size, size_t ze, int (*p)(const void* , const void* ))
//{
//	for (int i = 0; i < size - 1; i++)
//	{
//		int pan = 1;
//		for (int j = 0; j < size - 1 - i; j++)
//		{
//			
//			if(p((char*)arr + j * ze, (char*)arr + (j + 1) * ze) > 0)
//			{
//				_swap((char*)arr + j * ze, (char*)arr + (j + 1) * ze, ze);
//				pan = 0;
//			}
//			
//		}
//		if (pan)
//			break;
//	}
//}
//
//int main()
//{
//	int arr[] = { 9,8,7,6,5,3,4,2,1 };
//	int se = sizeof(arr) / sizeof(arr[0]);
//	_qsort(arr, se, sizeof(arr[0]), cmp);
//	for (int i = 0; i < se; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//	int* ptr1 = (int*)(&aa + 1);
//	int* ptr2 = (int*)(*(aa + 1));
//	printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
//	return 0;
//}#include <stdio.h>
//int main()
//{
//	char* a[] = { "work","at","alibaba" };
//	char** pa = a;
//	pa++;
//	printf("%s\n", *pa);
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//	char* c[] = { "ENTER","NEW","POINT","FIRST" };
//	char** cp[] = { c + 3,c + 2,c + 1,c };
//	char*** cpp = cp;
//	printf("%s\n", **++cpp);//
//	printf("%s\n", *-- * ++cpp + 3);
//	printf("%s\n", *cpp[-2] + 3);
//	printf("%s\n", cpp[-1][-1] + 1);
//	return 0;
//}

int _strlen(const char* str)
{
	int time = 0;

	while (*str != '\0')
	{
		time++;
		str++;
	}
	return time;
}
char* _strcpy(char* destination, const char* source)
{
	char* arr = destination;
	while (*source != '\0')
	{
		*destination = *source;
		source++;
		destination++;
	}
	*destination = *source;
	return arr;
}
char* _strcat(char* dest, const char* src)
{
	char* arr = dest;
	while (*dest)
	{
		dest++;
	}
	while (*dest++ = *src++)
	{
		;
	}
	return arr;
}
int _strcmp(const char* str1, const char* str2)
{
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
		{
			return 0;
		}
		str1++;
		str2++;
	}
	if (*str1 > *str2)
	{
		return 1;
	}
	else
	{
		return -1;
	}
}
char* _strstr(const char* str1, const char* str2)
{
	while (*str1 != '\0')
	{
		if (*str1 == *str2)
		{
			char* a = str1;
			char* b = str2;
			while (*a!='\0' && *a++ == *b++)
			{
				;
			}
			if (*b == '\0')
			{
				return str1;
			}
		}
		str1++;
	}
	return NULL;
}
int main()
{
	char arr1[] = "abbbcdf";
	char arr2[] = "cdf";
	
	printf("%s", _strstr(arr1,arr2));

	return 0;
}
